// 预订单任务

let config = require("./modules/config.js");
let utils = require("./modules/utils.js");
let system = require("./modules/system.js");
module.exports = {
    prepare_pay_task(items, retry_count = 10) {
        // 重试次数
        let _retry_count = retry_count
        // 主循环
        for (var i = 0; i < items.length; i++) {
            var product_share_text = items[i].product_share_text;
            var task_id = items[i].task_id;

            // 当[抖音口令]存在在product_share_text时
            if (product_share_text.includes("抖音口令")) {
                utils.fail_callback(null, task_id, config.updateOrderTaskStatus() + `?task_no=${task_id}&status=-1`,"任务失败,存在抖音口令，读取不到链接")
                continue
            }

            system.Log("开始执行第 " + (i + 1) + "/" + items.length + " 条: ");
            //
            setClip(product_share_text);
            sleep(2000);
            // 打开抖音
            app.launchApp(config.targetAppName);

            var ck_crl = utils.forceFindControl({functionName: text, text: "查看详情", click: true, awaitTime: 15000});
            if (!utils.fail_callback(ck_crl, task_id, config.updateOrderTaskStatus() + `?task_no=${task_id}&status=-1`)) {
                if (_retry_count > 0) {
                    i = i - 1;
                    _retry_count -= 1
                }
                system.Log("失败:" + product_share_text)
                continue;
            }
            // 检测是否被封禁
            var jc1 = utils.forceFindControl({
                functionName: textMatches,
                text: /.*(操作过于频繁|访问被拒绝).*/,

                awaitTime: 5000
            });
            if (jc1) {
                sleep(2000);
                utils.forceFindControl({
                    functionName: text,
                    text: "确定",
                    double_click: true,
                    click: true,
                    awaitTime: 3000
                });
                var jc2 = utils.forceFindControl({
                    functionName: textMatches,
                    text: /.*(操作过于频繁|访问被拒绝).*/,

                    awaitTime: 5000
                });
                if (jc2) {
                    utils.forceFindControl({
                        functionName: text,
                        text: "确定",
                        click: true,
                        awaitTime: 3000
                    });
                }
                sleep(500);
            }
            var buy_crl = utils.forceFindControl({
                functionName: textMatches,
                text: /立即购买|领券购买/,
                click: true,
                awaitTime: 12000
            })

            if (!utils.fail_callback(buy_crl, task_id, config.updateOrderTaskStatus() + `?task_no=${task_id}&status=-1`)) {
                if (_retry_count > 0) {
                    i = i - 1;
                    _retry_count -= 1
                }
                continue;
            }
            // 循环两次
            for (var x = 0; x < 2; x++) {
                var gg_crl = utils.forceFindControl({
                    functionName: text,
                    text: "请选择规格",
                    awaitTime: 5000
                })
                if (!gg_crl) {
                    break;
                }
                // 选择规格；选了款式，如果有尺码等第二个规格还需要适配
                utils.forceFindControl({
                    functionName: descMatches,
                    text: /未选择.+/,
                    index: 0,
                    awaitTime: 5000,
                    excludeClassNames: []
                })
                sleep(300); // 不能去掉
                utils.forceFindControl({
                    functionName: descMatches,
                    text: /未选择.+/,
                    index: -1,
                    awaitTime: 5000,
                    excludeClassNames: []
                })
                sleep(800);
            }
            var pay_type_crl = utils.forceFindControl({
                functionName: text,
                text: "支付宝",
                click: true,
                awaitTime: 5000
            })

            if (!pay_type_crl) {
                // 如果连"立即支付"都不存在，证明不是订单页面，直接失败就行。
                var zf = textMatches(/立即支付|开通并支付/).findOne(3000)
                if (!utils.fail_callback(zf, task_id, config.updateOrderTaskStatus() + `?task_no=${task_id}&status=-1`)) {
                    if (_retry_count > 0) {
                        i = i - 1;
                        _retry_count -= 1
                    }
                    continue;
                }
                // 滑动并且切换支付类型
                var flag_pay_type = false;
                utils.humanSwipe(device.width * 0.5, device.height * 0.7, device.width * 0.5, device.height * 0.3, 800)
                utils.forceFindControl({functionName: desc, text: "更多支付方式", click: true, awaitTime: 3000})
                for (var j = 0; j < 3; j++) {
                    var pay_type_crl2 = utils.forceFindControl({
                        functionName: text,
                        text: "支付宝",
                        click: true,
                        awaitTime: 5000
                    })

                    if (pay_type_crl2) {
                        flag_pay_type = true;
                        break
                    }
                    // 滑动
                    utils.humanSwipe(device.width * 0.5, device.height * 0.7, device.width * 0.5, device.height * 0.3, 800)
                }
                if (!flag_pay_type) {
                    utils.fail_callback(pay_type_crl, task_id, config.updateOrderTaskStatus() + `?task_no=${task_id}&status=-1`)
                    if (_retry_count > 0) {
                        i = i - 1;
                        _retry_count -= 1
                    }
                    continue;
                }
            }

            var pay_crl = utils.forceFindControl({functionName: text, text: "立即支付"})

            if (!utils.fail_callback(pay_crl, task_id, config.updateOrderTaskStatus() + `?task_no=${task_id}&status=-1`)) {
                if (_retry_count > 0) {
                    i = i - 1;
                    _retry_count -= 1
                }
                continue;
            }
            sleep(1000);
            // 再点击一次，防止有问题
            utils.forceFindControl({functionName: text, text: "立即支付", click: true, awaitTime: 3000})
            // 支付宝预支付类型；点击后等待 5 秒
            var zfb_page = utils.forceFindControl({
                functionName: textMatches,
                text: /确认付款|下一步|请输入支付密码/,
                click: false,
                awaitTime: 12000
            })
            if (!utils.fail_callback(zfb_page, task_id, config.updateOrderTaskStatus() + `?task_no=${task_id}&status=-1`)) {
                if (_retry_count > 0) {
                    i = i - 1;
                    _retry_count -= 1
                }
                continue;
            }
            sleep(2000);
            // 这里两个返回可能会有问题。因为有的直接弹出输入密码的，这时候一个返回是撤销输入法，第二个返回才是退出页面的。如果没有输入法，两个返回可能会把下一步跳过，导致失败
            system.goBack()
            system.goBack()
            utils.forceFindControl({functionName: text, text: "放弃", click: true, awaitTime: 5000})

            var dy_page_pay = utils.forceFindControl({
                functionName: text,
                text: "确认支付",
                click: false,
                awaitTime: 12000
            })
            // system.Log("准备截图0");
            if (!utils.fail_callback(dy_page_pay, task_id, config.updateOrderTaskStatus() + `?task_no=${task_id}&status=-1`)) {
                if (_retry_count > 0) {
                    i = i - 1;
                    _retry_count -= 1
                }
                continue;
            }
            // system.Log("准备截图");
            system.goBack();
            sleep(3000);
            // 开始截图
            for (var _i = 0; _i < 5; _i++) {
                var ProductDetailsHomepage = text("待支付").find()
                if (ProductDetailsHomepage && ProductDetailsHomepage.length === 1) {
                    // 绝对定位点击复制订单按钮
                    sleep(100)
                    click(config.copy_pos)
                    sleep(100)
                    // 截取商品截图；
                    utils.getGoodsOrderImage("任务截图", task_id)
                    break;
                } else {
                    system.goBack();
                }
            }

            // 当i是双数时执行
            // if (i % 2 === 0) {
            //     // 清除后台
            //     sleep(700);
            //     utils.goBackground()
            // } else {
            //     // 返回抖音主页
            //     utils.ReturnDYHome()
            //     sleep(700);
            //     system.goHome();
            // }

            sleep(700);
            utils.goBackground()
            sleep(random(5000, 7000));
        }
        system.Log("全部任务执行完成！");

    }
}

